﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Task1
{
    class Program
    {
        static void Main(string[] args)
        {
            DrawFrame(3, 4, '*');
            //EvenOddCounter(GenerateArray(5));
            //MaxMinValues(GenerateArray(5));
        }

        //1) Пользователь вводит целое число из консоли.Увеличить число на 10 и вывести на экран.

        public void NumberPlusTen()

        {
            try
            {
                Console.WriteLine("Enter number");
                int number = Int32.Parse(Console.ReadLine());
                Console.WriteLine("At first you entered: {0}", number);
                number += 10;
                Console.WriteLine("New number (+10): {0}", number);
            }
            catch
            {
                Console.WriteLine("Enter only digits");
            }
        }

        //2) Найти сумму ряда чисел от 1 до n.n - целое положительное число
        //вводиться пользователем в консоли.Если n - не удовлетворяет условию - вывести сообщение об ошибке.

        public static void NumbersSum()

        {
            int sum = 0;
            Console.WriteLine("Enter n - quantity of digits");
            int n = Int32.Parse(Console.ReadLine());
            for (int i = n; i > 0; i--)
            {
                sum += i;
            }

            Console.WriteLine("Sum: {0}", sum);
        }

        //3) Пользователь из консоли вводит координаты x и y двух точек.Найти расстояние по прямой между этими точками.

        public static void DistancePerCoords()
        {
            Console.WriteLine("Enter x");
            int x = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Enter y");
            int y = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Enter x1");
            int x1 = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Enter y1");
            int y1 = Int32.Parse(Console.ReadLine());


            double distance = Math.Round(Math.Sqrt(Math.Pow(x - x1, 2) + Math.Pow(y - y1, 2)), 2);
            Console.WriteLine("Distance : {0}", distance);

        }

        // 4) Пользователь из консоли вводит координаты x и y точки.
        //Определить какой четверти принадлежит точка.Обработать результат когда точка имеет координаты 0.0

        public static void PartDeterminer()
        {
            Console.WriteLine("Enter x");
            int x = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Enter y");
            int y = Int32.Parse(Console.ReadLine());


            if (x > 0 && y > 0)
            {
                Console.WriteLine("Point belongs to Part 1");
            }
            else if (x < 0 && y > 0)
            {
                Console.WriteLine("Point belongs to Part 2");
            }
            else if (x < 0 && y < 0)
            {
                Console.WriteLine("Point belongs to Part 3");
            }
            else if (x > 0 && y < 0)
            {
                Console.WriteLine("Point belongs to Part 4");
            }
            else
            {
                Console.WriteLine("Zero point");
            }
        }

        //5) Нарисовать рамку в консоли.
        //  Высота, Ширина и символ для отображения границ рамки являются входящими параметрами в метод

        public static void DrawFrame(int height, int width, char ch)
        {
            
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    if ((i > 0 && i < height - 1 ) && (j > 0 && j < width - 1 ))
                    {
                        Console.Write(" ");
                    }
                    else
                    {
                        Console.Write(ch);
                    }
                }
                Console.WriteLine();
            }
        }

        //6) Реализовать метод который создает и возвращает одномерный массив целочисленных значений
        //и заполняет его случайными числами в диапазоне от 1 до 100. Размер массива указывается во входящем параметре метода.

        public static int[] GenerateArray (int size)
        {
            Random rnd = new Random();
            int[] myArray = new int[size];

            for (int i = 0; i < size; i++)
            {
                myArray[i] = rnd.Next(1,100);
            }
            
            foreach (var element in myArray)
            {
                Console.Write("{0} ",element);
            }
            Console.WriteLine();

            return myArray;
        }

        //7) Вывести элементы массива на экран.Посчитать количество четных и нечетных элементов.
        //Для создания массива воспользоваться методом из предыдущего задания.Размер массива 5

        public static void EvenOddCounter(int[] myArray)
        {
            int evenCounter = 0;
            int oddCounter = 0;

            for (int i = 0; i < myArray.GetLength(0); i++)
            {
                if (i%2 == 0)
                {
                    evenCounter++;
                }
                else
                {
                    oddCounter++;
                }
            }
            Console.WriteLine("Even: {0}, Odd: {1}", evenCounter, oddCounter);
        }

        //8) Вывести массив на экран, найти позицию первого вхождения минимального и максимального элемента,
        //а так же общее кол-во вхождени й минимального и максимального элементов в массив

        public static void MaxMinValues (int[] myArray)
        {

            int minCount = 0;
            int maxCount = 0;


            for (int i = 0; i < myArray.GetLength(0); i++)
            {
                if (myArray[i] == myArray.Max())
                {
                    maxCount++;
                }
                else if (myArray[i] == myArray.Min())
                {
                    minCount++;
                }
            }

            Console.WriteLine("Max value: {0} meat {1} times first time @ {2} in array\n" + 
                "Min value {3} meat {4} times first time @ {5} in array", myArray.Max(), maxCount, Array.IndexOf(myArray,myArray.Max()), myArray.Min(), minCount, Array.IndexOf(myArray, myArray.Min()));

        }

    }
}
